/*
Date:20210414 7:30pm
C:100case
key:1.首先明确所有的反转都是由内到外进行的，因此第一次反转是发生在从左到右第一次碰到')'的时候。
2.直觉告诉我们可以用栈来一个个装，当碰到)时。持续弹出到一个队列里(因为要反转)直到栈顶是(，这是还要再pop一次，因为此时栈顶是(。这时再将
队列里全部pop到栈，这样就完成了一次反转。
3.注意最后栈弹出是反的，因此全部弹出到一个vector里，i=V.size()-1,逆序输出即可。
*/

#include<iostream>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
void res(stack<char>& S)
{
    queue<char>S1;
    while (S.top() != '(')
    {
        S1.push(S.top());
        S.pop();
    }
    S.pop();
    while (!S1.empty())
    {
        S.push(S1.front());
        S1.pop();
    }
    
}
int main()
{
    stack<char>S;
    string s;
    cin >> s;
    for (int i = 0; i < s.size(); i++)
    {
        if (s[i] != ')')
        {
            S.push(s[i]);
        }
        else
        {
            //弹出到(,反转再塞回去
            res(S);
        }
    }
    
    vector<char>V;
    while (!S.empty())
    {
     
        V.push_back(S.top());
        S.pop();
    }
   
    for (int i = V.size()-1; i >= 0; i--)
    {
        cout << V[i];
    }
}